﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace AgendaManager.Service
{
    public class IvoNotaDAO : DAOBase
    {
        internal static bool CreateIvoNota(IvoNota ivoNota)
        {
            try
            {
                int ivoNotaId = GetNextId(ivoNota);

                if (ivoNotaId != 0)
                {
                    ivoNota.Id = ivoNotaId;
                    return CreateEntity(ivoNota);
                }
                return false;
            }
            catch (Exception)
            {
                throw new Exception("No se pudo crear el IvoNota");
            }

        }

        internal static List<IvoNota> RetrieveEntitiesWhere(object dto, string where)
        {
            List<IvoNota> dtos = new List<IvoNota>();

            DataTable dt = GetDataTableWhere(dto, where);

            if (dt.Rows.Count > 0)
                dtos = LlenarIvoNotas(dto, dt);

            return dtos;
        }

        private static List<IvoNota> LlenarIvoNotas(object dto, DataTable dt)
        {
            List<IvoNota> dtos = new List<IvoNota>();

            foreach (DataRow dr in dt.Rows)
            {
                IvoNota aux = new IvoNota();
                PoblarObjetoDesdeDataRow(aux, dr);

                dtos.Add(aux);
            }

            return dtos;
        }

        internal static List<IvoNota> GetIvosNames(string where)
        {
            List<IvoNota> dtos = new List<IvoNota>();
            
            DataTable dt = new DataTable("IvoNota");

            try
            {
                //Condición boba para poder agregarle los OR
                string query = string.Format("SELECT Id, CarpetaId, Nombre, Extension FROM {0} WHERE 1=1 AND ", "IvoNota");

                if (where != string.Empty)
                    query += where;

                //Le saco el AND o el OR que quedó en el final de la query.
                if (query.Trim().EndsWith("AND") || query.Trim().EndsWith("OR"))
                    query = query.Remove(query.Length - 4);


                using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connStr))
                {
                    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(query, con))
                    {
                        con.Open();

                        //Preparo el DataAdapter y DataTable para retornar los datos.
                        System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();

                        da.SelectCommand = cmd;

                        da.Fill(dt);

                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            if (dt.Rows.Count > 0)
                dtos = LlenarIvoNotas(new IvoNota(), dt);

            return dtos;
        }
    }
}